package com.Webserver.http;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import javax.xml.transform.sax.SAXResult;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * HTTPContext 封装当前服务器的有关的静态环境信息
 * 文件类型映射(mime-mapping) 是静态环境信息.
 */
public class HttpContext {
    /** 全部用户共享的 文件类型映射 集合 */
    private static Map<String,String> mimeMapping = new HashMap<>();

    static {
        initMimeMapping();
    }

    /** 定义初始化方法，封装 mimeMapping集合的初始化过程 */
    private static void initMimeMapping(){
        try {
            File file = new File("./config/web.xml");
            SAXReader reader = new SAXReader();
            Document doc = reader.read(file);
            System.out.println(doc.asXML());//打桩
            Element root = doc.getRootElement();
            List<Element> list = root.elements("mime-mapping");
            for(Element e : list ){
                System.out.println(e.asXML());//打桩
                String ext = e.elementText("extension");
                String type = e.elementText("mime-Type");
                mimeMapping.put(ext,type);
            }
        } catch (DocumentException e) {
            e.printStackTrace();
            throw new RuntimeException(e);//非检查异常
        }
    }
    /** 根据文件的扩展名,检查其对应的,媒体类型(mine type)
     * 如:ext时png 则返回 image/png
     * ext: 扩展名
     * mime: 类型
     */
    public static String getMimeMapping(String ext) {
        return mimeMapping.get(ext);
    }
    public static void main(String[] args) {
        //JVM 加载 HTTPContext 时候会自动初始化 mimeMapping
        System.out.println(mimeMapping);
    }
}
